local ClientOHOH = _G.ClientOHOH;

local M = ClientOHOH.class.new(script, ClientOHOH.files.BaseObject());
local CallBackManager = ClientOHOH.load.CallBackManager();

local TweenHelper = _G.CommonOHOH.load.TweenHelper();

local tw1 = TweenInfo.new(0.3, Enum.EasingStyle.Back,Enum.EasingDirection.Out);

function M.new(...)
	return M(...);
end;

function M.ctor(self,root,cell,ctrl)
    self.ctrl=ctrl
    self.cellPerfab=cell
    self.root=root
    self.layout=root:FindFirstChildOfClass("UIGridLayout")
    self.List={}
	M.super.ctor(self);
end;

function M.dtor(self)
	M.super.dtor(self);
end;

-- 根据数据创建项
function M.AddCell(self,ui,data)

    local cell=require(script.Parent.cell).new(ui,data,self.ctrl)
    data.RemoveEvent:Connect(function()
        cell:dtor()
        self.List[data.id]=nil
    end)

    cell.click:Connect(function()
        self.ctrl:CellClick(cell)
    end)

  

    self.List[data.id]=cell
    self.RemoveList={}
end


function M.IshadData(self,data)
    if self.List[data.id] then
        return true
    end
    return false
end

function M.FilterByCell(self,cell)
    if cell then
        for k,v in pairs(self.List) do
            if  v:IsEqual(cell) then
                 v:Show()
            else
                 v:Hide()
            end
         end
    else
        for k,v in pairs(self.List) do
            v:Show()
         end
    end

end

function M.FindCellByCidAndLevel(self,cid,level)
    for k,v in pairs(self.List) do
            local data=v:GetData()
            if data.cfgId==cid and data.level==level  then
                return v
            end
     end
end

--列表变大
function M.Big(self)
    self.layout.CellSize=self.layout:GetAttribute("big")
    TweenHelper:PlayTween(self.root, tw1, {
        Size=self.root:GetAttribute("big")
    });

end

--列表变小
function M.Small(self)
    TweenHelper:PlayTween(self.root, tw1, {
        Size=self.root:GetAttribute("small")
    });
    self.layout.CellSize=self.layout:GetAttribute("small")
end

-- 添加一个删除项到列表
function M.AddRemove(self,cell)
    cell:ShowRemoveTag()
    self.RemoveList[cell]=true
end

--清空删除项
function M.ClearRemove(self)
    for cell,_ in pairs(self.List) do
        cell:HideRemoveTag()
    end
    self.RemoveList={}
end

--获取删除项
function M.PullAllRemove(self)
    local list={}
    for cell,_ in pairs(self.RemoveList) do
        table.insert(list,cell:GetData())
    end
    self.RemoveList={}
    return list
end


return M